/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.jms;

import com.losalpes.catalog.ICatalogService;
import com.losalpes.persistence.entity.Mueble;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * Clase que representa una de las aplicaciones llamado ventas
 * @author Henry.Quiroga
 */
@MessageDriven(mappedName = "jms/PromocionTopic", activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
    @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "VentasMessageBean"),
    @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "VentasMessageBean")
})
public class VentasMessageBean implements MessageListener {

    @Resource
    private MessageDrivenContext mdc;
    @EJB
    private ICatalogService catalogService;

    /**
     * constructor de la clase
     */
    public VentasMessageBean() {
    }

    /**
     * Recibe el mensaje proveniente de publicador
     * @param message  mensaje de entrada
     */
    public void onMessage(Message message) {
        TextMessage msg = null;
        try {
            if (message instanceof TextMessage) {
                msg = (TextMessage) message;

                Mueble mueble = catalogService.getMueble(Long.parseLong(msg.getText()));
                String mensaje = "NUEVA PROMOCION mueble " + mueble.getReferencia() + " Mercadeo: NUEVA PROMOCION " + mueble.getDescripcionPromocion();
                mensaje += " para el mueble " + mueble.getNombre() + "(" + mueble.getReferencia() + ") " + mueble.getTipo();

                Logger.getLogger(VentasMessageBean.class.getName()).log(Level.INFO, mensaje);
            } else {
                Logger.getLogger(VentasMessageBean.class.getName()).log(Level.SEVERE,
                        "Mensaje de tipo equivocado: " + message.getClass().getName());
            }
        } catch (JMSException e) {
            e.printStackTrace();
            mdc.setRollbackOnly();
        } catch (Throwable te) {
            te.printStackTrace();
        }
    }
}
